package com.shisfish.library.Controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;

import com.shisfish.library.Impl.UtilImpl;
import com.shisfish.library.Model.Util;
import com.shisfish.library.Prere.Login;
import com.shisfish.library.Utils.Global.GlobalVariable;
import com.shisfish.library.Utils.Global.toJsonUtils;

@Path("util")	
public class UtilController extends GlobalVariable {

	private UtilImpl utilImpl = new UtilImpl();
	
	/**
	 * @author shisfish
	 * @date 2016年2月3日 上午12:12:33
	 * @Description 新增一个部门
	 * @param idadmin
	 * @param fcode
	 * @param name
	 * @param request
	 * @return
	 */
	@POST
	@Path("insertAUtil/{idadmin}")
	@Produces("application/json; charset=utf-8")
	public String insertAUtil(@PathParam("idadmin") String idadmin, @FormParam("fcode") int fcode, 
			@FormParam("name") String name, @Context HttpServletRequest request) {
		Map<String, Object> globalMap = new HashMap<String, Object>();
		if (Login.isLoginAdmin(idadmin, request)) {
			Util util = new Util(name, fcode);
			
			int flag = utilImpl.insertOne(util);
			
			if (flag == 1) {
				globalMap.put(STATUS_CODE, SUCCESS);
			} else {
				globalMap.put(STATUS_CODE, INSERT_WR);
			}
		} else {
			globalMap.put(STATUS_CODE, NOT_LOGGED_IN);
		}
		
		return toJsonUtils.map2Json(globalMap);
	}
	
	/**
	 * @author shisfish
	 * @date 2016年2月3日 上午12:15:27
	 * @Description 通过 fcode 查询信息
	 * @param fcode
	 * @return
	 */
	@GET
	@Path("selectByFcode/{fcode}")
	@Produces("application/json; charset=utf-8")
	public String selectByFcode(@PathParam("fcode") int fcode) {
		Map<String, Object> globalMap = new HashMap<String, Object>();
		
		List<Util> utils = utilImpl.selectByFcode(fcode);
		
		if (utils.size() > 0) {
			globalMap.put(STATUS_CODE, SUCCESS);
			globalMap.put("list", utils);
		} else if (utils.size() == 0) {
			globalMap.put(STATUS_CODE, SELECT_EMPTY);
		} else {
			globalMap.put(STATUS_CODE, SELECT_ERROR);
		}
		
		return toJsonUtils.map2Json(globalMap);
	}
	
	/**
	 * @author shisfish
	 * @date 2016年2月3日 上午12:16:24
	 * @Description 通过 id 查询信息
	 * @param id
	 * @return
	 */
	@GET
	@Path("selectById/{id}")
	@Produces("application/json; charset=utf-8")
	public String selectById(@PathParam("id") int id) {
		Map<String, Object> globalMap = new HashMap<String, Object>();
		
		List<Util> utils = utilImpl.selectById(id);
		
		if (utils.size() > 0) {
			globalMap.put(STATUS_CODE, SUCCESS);
			globalMap.put("obj", utils.get(0));
		} else if (utils.size() == 0) {
			globalMap.put(STATUS_CODE, SELECT_EMPTY);
		} else {
			globalMap.put(STATUS_CODE, SELECT_ERROR);
		}
		
		return toJsonUtils.map2Json(globalMap);
	}
	
	/**
	 * @author shisfish
	 * @date 2016年2月3日 上午12:17:13
	 * @Description 通过 id 删除数据
	 * @param idadmin
	 * @param id
	 * @param request
	 * @return
	 */
	@POST
	@Path("deleteById/{idadmin}/{id}")
	@Produces("application/json; charset=utf-8")
	public String deleteById(@PathParam("idadmin") String idadmin, @PathParam("id") int id, 
			@Context HttpServletRequest request) {
		Map<String, Object> globalMap = new HashMap<String, Object>();
		
		if (Login.isLoginAdmin(idadmin, request)) {
			int flag = utilImpl.deleteOneById(id);
			
			if (flag == 1) {
				globalMap.put(STATUS_CODE, SUCCESS);
			} else {
				globalMap.put(STATUS_CODE, DELETE_WR);
			}
		} else {
			globalMap.put(STATUS_CODE, NOT_LOGGED_IN);
		}
		
		return toJsonUtils.map2Json(globalMap);
	}
	
	/**
	 * @author shisfish
	 * @date 2016年2月3日 上午12:18:07
	 * @Description 通过 fcode 删除数据
	 * @param idadmin
	 * @param fcode
	 * @param request
	 * @return
	 */
	@POST
	@Path("deleteByFcode/{idadmin}/{fcode}")
	@Produces("application/json; charset=utf-8")
	public String deleteByFcode(@PathParam("idadmin") String idadmin, @PathParam("fcode") int fcode, 
			@Context HttpServletRequest request) {
		Map<String, Object> globalMap = new HashMap<String, Object>();
		
		if (Login.isLoginAdmin(idadmin, request)) {
			int flag = utilImpl.deleteByFcode(fcode);
			
			if (flag == 0) {
				globalMap.put(STATUS_CODE, DELETE_WR);
			} else {
				globalMap.put(STATUS_CODE, SUCCESS);
			}
		} else {
			globalMap.put(STATUS_CODE, NOT_LOGGED_IN);
		}
		
		return toJsonUtils.map2Json(globalMap);
	}
	
	/**
	 * @author shisfish
	 * @date 2016年2月3日 上午12:19:07
	 * @Description 通过 id 修改信息
	 * @param idadmin
	 * @param id
	 * @param name
	 * @param request
	 * @return
	 */
	@POST
	@Path("updateById/{idadmin}/{id}")
	@Produces("application/json; charset=utf-8")
	public String updateById(@PathParam("idadmin") String idadmin, @PathParam("id") int id, 
			@FormParam("name") String name, @Context HttpServletRequest request) {
		Map<String, Object> globalMap = new HashMap<String, Object>();
		if (Login.isLoginAdmin(idadmin, request)) {
			List<Util> utils = utilImpl.selectById(id);
			
			if (utils.size() > 0) {
				
				if (utils.get(0).getName().equals(name.trim())) {
					globalMap.put(STATUS_CODE, SUCCESS);
				} else {
					
					Util util = utils.get(0);
					
					List<Util> utilss = utilImpl.selectByKey(name.trim());
					
					if (utilss.size() > 0) {
						globalMap.put(STATUS_CODE, SELECT_SAME);
					} else {
						
						util.setName(name.trim());
						
						int flag = utilImpl.updateOne(util);
						
						if (flag == 1) {
							globalMap.put(STATUS_CODE, SUCCESS);
						} else {
							globalMap.put(STATUS_CODE, UPDATE_WR);
						}
					}
					
				}
			} else if (utils.size() == 0) {
				globalMap.put(STATUS_CODE, SELECT_EMPTY);
			} else {
				globalMap.put(STATUS_CODE, SELECT_ERROR);
			}
		} else {
			globalMap.put(STATUS_CODE, NOT_LOGGED_IN);
		}
		
		return toJsonUtils.map2Json(globalMap);
	}
	
	/**
	 * @author shisfish
	 * @date 2016年2月4日 下午6:23:17
	 * @Description 所有的单位
	 * @return
	 */
	@GET
	@Path("selectAll1")
	@Produces("application/json; charset=utf-8")
	public String selectAll1() {
		Map<String, Object> globapMap = new HashMap<String, Object>();
		
		List<Util> utils = utilImpl.selectAll();
		
		if (utils.size() > 0) {
			globapMap.put(STATUS_CODE, SUCCESS);
			globapMap.put("list", utils);
		} else if (utils.size() == 0) {
			globapMap.put(STATUS_CODE, SELECT_EMPTY);
		} else {
			globapMap.put(STATUS_CODE, SELECT_WR);
		}
		
		return toJsonUtils.map2Json(globapMap);
	}
	
	@GET
	@Path("selectAll")
	@Produces("application/json; charset=utf-8")
	public String selectAll() {
		Map<String, Object> globapMap = new HashMap<String, Object>();
		
		// 找到第一级
		List<Util> utils = utilImpl.selectByFcode(0);
		
		if (utils.size() > 0) {
			List<Map<String, Object>> choList = new ArrayList<Map<String, Object>>();
			for (Util util : utils) {
				Map<String, Object> choMap = new HashMap<String, Object>();
				List<Util> utilss = utilImpl.selectByFcode(util.getId());
				choMap.put("higher", util);
				choMap.put("lower", utilss);
				
				choList.add(choMap);
				
			}
			
			globapMap.put(STATUS_CODE, SUCCESS);
			globapMap.put("list", choList);
		} else if (utils.size() == 0) {
			globapMap.put(STATUS_CODE, SELECT_EMPTY);
		} else {
			globapMap.put(STATUS_CODE, SELECT_WR);
		}
		
		return toJsonUtils.map2Json(globapMap);
	}
	
}
